package stream.demo03;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;

//流的回收
//对数据使用Stream流的方式操作完毕后，我想把流中的数据收集到集合中，该怎么办呢？
//Stream流的收集方法
//1. R collect(Collector collector)
public class StreamDemo01 {

    //入口
    public static void main(String[] args) {
        //创建集合对象
        // 1. 创建一个ArrayList集合对象
        ArrayList<Integer> arrayList = new ArrayList<Integer>();
        // 2. 添加元素
        arrayList.add(23);
        arrayList.add(12);
        arrayList.add(34);
        arrayList.add(56);
        arrayList.add(33);
        arrayList.add(56);
        // 需求：获取元素 >= 34的流对象
        Stream<Integer> stream = arrayList.stream().filter((s) -> {
            if (s >= 34) {
                return true;
            }
            return false;
        });

        //调用这个方法进行收集操作： R collect(Collector collector)
        // 需求: 把流中的元素收集到List集合中
        // 如何获取到List集合的收集器呢？ 通过Collectors中的静态方法进行获取
        //List<Integer> collect = stream.collect(Collectors.toList());
        //collect.forEach(s-> System.out.println(s));


        //需求:把元素收集到Set中
        Set<Integer> collect = stream.collect(Collectors.toSet());
        collect.forEach(s-> System.out.println(s));

        System.out.println("---------------");

        ArrayList<String>arrayList1 = new ArrayList<>();

        //添加对象
        arrayList1.add("杨过,23");
        arrayList1.add("乔峰,34");
        arrayList1.add("易烊千玺,18");
        arrayList1.add("王千源,30");
        //将>=23的元素放到Map及合里
        Stream<String> stringStream = arrayList1.stream().filter(s -> {

            //对字符串切割进行年判断
            String[] split = s.split(",");
            String s1 = split[1];
            int i = Integer.parseInt(s1);
            if(i>=23){
                return true;
            }else {
                return false;
            }
        });
        System.out.println("--------------------");

        //把流中的元素收集到Map集合中,要求:键是姓名,值是年龄
        Map<String, Integer> collect1 = stringStream.collect(Collectors.toMap((s) -> {
            String[] info = s.split(",");
            return info[0];
        }, (s) -> {
            String[] info = s.split(",");
            return Integer.parseInt(info[1]);
        }));
        collect1.forEach((key,value)-> System.out.println(key+","+value));


    }
}
